home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / BASIC / 0156.ZIP / RGRAPH.UNP < prev    next >
Text File  |  1984-10-24  |  12KB  |  363 lines

  1. FOR THE USERS THAT HAVE 'R:GRAPH' V 1.0
  2. -------------------------------------------------------------------
  3.  
  4. THIS  IS DATED SEPT 1, 1984 AND SUPERSEDES ALL UNDATED
  5. VERSIONS OR DATED VERSIONS PRIOR TO THIS DATE.
  6.  
  7.  
  8. FROM : THE A.S.P ; (Against Software Protection)
  9.  
  10. ORIGINALLY SUBMITTED TO ASA FULTON'S BBS (SHINING SUN - 305-273-0020)
  11.                  AND TO WHIT WYANT'S BBS (PC-CONNECT  - 203-966-8869)
  12.  
  13. PLEASE NOTE THAT THESE UNPROTECT PROCEDURES INVOLVE FROM 4 HOURS TO
  14. ___________________________________________________________________
  15.  
  16. 40 OR MORE HOURS ( 20+ HOURS FOR 'R:GRAPH) OF
  17.  
  18. SINGLE STEPPING THRU CODE AND FIGURING OUT THE
  19.  
  20. INTENT OF THE ORIGINAL CODE.. SO I WOULD APPRECIATE IT WHEN U PASS
  21.  
  22. THIS ON TO OTHER BOARDS YOU DO NOT ALTER THIS OR TRY TO TAKE CREDIT
  23.  
  24. FOR MY LOST SLEEP.... THE A.S.P... ORLANDO FLA. (J.P. TO HIS FRIENDS)
  25.  
  26.  
  27. IF YOU HAVE A HARD DISK OR WANT TO CREATE A BACKUP COPY THAT IS NOT
  28. TIED INTO THE 'R:GRAPH'  DISKETTE...IN CASE YOUR ONLY COPY GOES BAD
  29. .. THIS PATCH WILL REMOVE THE COPY PROTECTION COMPLETELY....
  30.  
  31.   AS ALWAYS THIS IS FOR YOUR PERSONAL PEACE OF MIND ONLY
  32. IT IS NOT MEANT TO BYPASS ANY COPYRIGHTS..YOU ARE BY LAW BOUND BY
  33. YOUR PURCHASE LICENSE AGREEMENT.
  34.  
  35.   IF YOU HAVE A HARD DISK AND WANT TO PUT THE PROGRAM ON SUCH
  36.  WHY SHOULD YOU BE TIED TO A FLOPPY. YOU HAD TO GIVE UP A LOT OF
  37.  'BIG MACS' TO GET YOUR HARD DISK.
  38.  
  39.  
  40. 1). FORMAT 1 SYSTEM DISK UNDER DOS 2.0 OR 2.1
  41.  
  42. 2). LABEL IT ACCORDING TO THE ORIGINAL 'R:GRAPH' PROGRAM DISKETTE
  43.  
  44. 3). COPY THE FILES FROM THE ORIGINAL DISKETTE TO THE CORRESPONDING
  45.    2.X FORMATTED DISKETTE
  46.  
  47. 4). PLACE THE ORIGINAL 'R:GRAPH' DISKETTE BACK IN THE MANUAL
  48.    WE WILL NO LONGER USE THEM.
  49.  
  50. 5). I WON'T  TELL U HOW TO USE DEBUG OR  ANY 'PATCHER' PROGRAMS
  51.    ON THE BBS'S.
  52.  
  53. 6). FIRST WE WILL NEED TO CHANGE A PROGRAM CALLED 'RGRAPG2.EXE'
  54.  
  55. 7). THE FOLLOWING IS THE OUTPUT WHEN THE ORIGINAL 'RGRAPH2.EXE'
  56.    WAS COMPARED WITH THE MODIFIED VERSION, USING DOS 'COMP'.
  57.  
  58.    Compare error at offset 279
  59.    File 1 = A1
  60.    File 2 = C3
  61.  
  62.    Compare error at offset 112BF
  63.    File 1 = 41
  64.    File 2 = 52
  65.  
  66.    Compare error at offset 112C0
  67.    File 1 = 3A
  68.    File 2 = 47
  69.  
  70.    Compare error at offset 112C1
  71.    File 1 = 52
  72.    File 2 = 30
  73.  
  74.    Compare error at offset 112C2
  75.    File 1 = 47
  76.    File 2 = 20
  77.  
  78.    Compare error at offset  112C3
  79.    File 1 = 30
  80.    File 2 = 20
  81.  
  82.    Compare error at offset 112CA
  83.    File 1 = 41
  84.    File 2 = 52
  85.  
  86.    Compare error at offset  112CB
  87.    File 1 = 3A
  88.    File 2 = 47
  89.  
  90.    Compare error at offset  112CC
  91.    File 1 = 52
  92.    File 2 = 30
  93.  
  94.    Compare error at offset  112CD
  95.    File 1 = 47
  96.    File 2 = 2E
  97.  
  98.    Compare error at offset 112CE
  99.    File 1 = 30
  100.    File 2 = 45
  101.  
  102.    Compare error at offset 112CF
  103.    File 1 = 2E
  104.    File 2 = 58
  105.  
  106.    Compare error at offset 112D1
  107.    File 1 = 58
  108.    File 2 = 00
  109.  
  110.    Compare error at offset 112D2
  111.    File 1 = 45
  112.    File 2 = 00
  113.  
  114.    Compare error at offset 112F1
  115.    File 1 = 41
  116.    File 2 = 20
  117.  
  118. NOTE: NOW ALL OF 'R:GRAPH' COPY PROTECTION IS REMOVED, AND U MAY DISKCOPY
  119.      THE UNPROTECTED DISKS AS REQUIRED.
  120.  
  121.  
  122.  
  123. OTHER NOTES:
  124. -------------------------------------------------------------------------
  125.  
  126. 1). CHECKS FOR SPECIALLY FORMATTED TRACKS COMPLETELY REMOVED
  127.  
  128.  
  129. 2). U MAY LOAD ALL THE FILES ON THE NEWLY FORMATTED AND UNPROTECTED
  130.    DISKETTE DIRECTLY TO HARD OR RAM DISK, IN ANY SUB-DIRECTORY U
  131.    SET UP
  132.  
  133. 3). DISK NO LONGER REQUIRED TO BE IN DRIVE "A" AT START UP
  134.  
  135.  
  136. 4). NO 'ASSIGNS' NECESSARY, ALL FILES MODIFIED TO USE CURRENT DEFAULT DRIVE
  137.  
  138. 5). DO NOT!!! , I REPEAT , DO NOT !!! EXECUTE 'RGRAPH.COM' AS INSTRUCTED
  139.    IN THE MANUALS. INSTEAD EXECUTE 'RGRAPH2.EXE'. YOU MAY SET UP A BATCH FILE
  140.    CALLED 'RGRAPH.BAT' IF U REALLY WANT TO EMULATE THE INTRUCTIONS, OTHERWISE
  141.    EXECUTE 'RGRAPH2.EXE' DIRECTLY (WHICH IS WHAT RGRAPH.COM DOES INDIRECTLY).
  142.  
  143. 6). WHAT FOLLOWS IS THE DISASSEMBLY OF RGRAPH.COM FOR U ASSEMBLER PROGRAMMERS
  144.    TO SEE WHAT WAS HAPPENING, WITH MY COMMENTS, ANOTHER EXTRA FOR YOU.
  145.  
  146. TITLE   RGRAPH  5-25-84 [8-20-84]
  147.  
  148. RET_FAR MACRO
  149. DB      0CBH
  150. ENDM
  151. ;
  152. RET_NEAR        MACRO
  153. DB      0C3H
  154. ENDM
  155. ;
  156. .RADIX  16
  157. LF      EQU     0AH
  158. CR      EQU     0DH
  159. ;
  160. ;INITIAL VALUES :       CS:IP   0000:0100
  161. ;                       SS:SP   0000:FFFF
  162. S0000   SEGMENT
  163.         ASSUME DS:S0000, SS:S0000 ,CS:S0000 ,ES:S0000
  164.         ORG     $+0100H
  165. L0100:  LEA     SP,L02CA   ;LOAD ADDRESS OF TOP OF OUR STACK
  166.         MOV     AX,CS
  167.         MOV     SS,AX      ;POINT THE STACK SEGMENT TO OUR CODE SEGMENT
  168.         PUSH    DS         ;SET UP RETURN TO BEGINNING OF PSP FOR INT 20
  169.         XOR     BX,BX      ;PUSH OUR DATA SEGMENT AND A WORD OF ZEROS ON STACK
  170.         PUSH    BX
  171.         XOR     AL,AL      ;CHECK PSP X'80' (LENGTH BYTE) TO SEE IF ANY
  172.         CMP     ES:80,AL   ;PARAMETERS ENTERED WHEN WE EXECUTED PROGRAM
  173.         JZ      L012E      ;NO, LENGTH WAS ZERO
  174.         XOR     CX,CX      ;YES, LETS SAVE THE INPUT PARAMETER STRING
  175.         MOV     CL,ES:80   ; GET THE LENGTH OF THE PARAMETER STRING
  176.         MOV     DI,OFFSET L0142 ;POINT TO OUR SAVE STRING AREA
  177.         MOV     SI,82      ;POINT TO FIRST PARAMETER BYTE IN PSP
  178.         REPZ    MOVSB      ;SAVE IT
  179.         MOV     AL,ES:80   ;GET PARAMETER LENGTH AGAIN
  180.         ADD     AL,7       ;ACCOUNT FOR "RGRAPH2" ALREADY IN STRING
  181.         MOV     CS:L0139,AL ;SAVE PARAMETER LENGTH IN FRONT OF STRING
  182.  
  183. L012E:  CALL    L02CB       ;SETUP SCREEN AND REPLACE INT 21
  184.         RET_FAR
  185.  
  186. L0132   DW      0           ;SAVE TRUE INT 21 SEGMENT OFFSET
  187. L0134   DW      0           ;SAVE TRUE INT 21 SEGMENT ADDRESS
  188. L0136   DW      0           ;SAVE OUR CODE SEGMENT ADDRESS
  189. L0138   DB      1           ;GENERAL PURPOSE PROGRAM PATH FLOW FLAG
  190. L0139   DB      8           ;LENGTH OF STRING THAT FOLLOWS
  191.         DB      "RGRAPH2 "
  192. L0142   DB      0DH         ;CARRIAGE RETURN FOR INT 21 X'A' FUNCTION CALL
  193.         DB      50 DUP(20)  ;EXTENDED STRING AREA IF ANY PARAMETERS INPUT
  194.  
  195. ;
  196. ; ENTRY POINT FOR OUR DOS 21 INTERRUPT HANDLER
  197. ;
  198.  
  199. L0193:  CMP     AH,0FF      ;FUNCTION CALL X'FF'
  200.         JZ      L01D4       ;YES
  201.         CMP     AH,0FE      ;FUNCTION CALL X'FE'
  202.         JZ      L0203       ;YES, GO RESTORE TRUE INT 21 ADDRESS
  203.         CMP     BYTE PTR CS:L0138,1 ;IS FLAG SET TO 1
  204.         JNZ     L01AA       ;NO
  205.         CMP     AH,0A       ;YES, IS IT A BUFFERED KEYBOARD FUNCTION CALL
  206.         JZ      L01AF       ;YES, GO GIVE CALLER WHAT WE WANT HIM TO SEE
  207. L01AA:  JMP     DWORD PTR CS:L0132 ;LETS GO LET THE REAL DOS 21 HANDLER DO IT
  208.  
  209. ;
  210. ; ENTRY POINT FOR DOS 21 X'0A' FUNCTION CALL (BUFFERED KEYBOARD INPUT)
  211. ;
  212.  
  213. L01AF:  PUSH    DS ;SAVE SOME REGISTERS
  214.         PUSH    CX
  215.         PUSH    ES
  216.         PUSH    DI
  217.         PUSH    SI
  218.         PUSH    DS ;POINT 'ES' TO CALLERS DATA SEGMENT
  219.         POP     ES
  220.         MOV     DI,DX ;DS:DX POINTS TO CALLERS INPUT BUFFER '
  221.         INC     DI    ;POINT 1 BYTE PAST CALLERS INPUT BUFFER LENGTH
  222.         PUSH    CS    ;POINT DATA SEGMENT TO USE
  223.         POP     DS
  224.         MOV     SI,OFFSET L0139 ;POINT TO OUR STRING WE WANT TO SEND CALLER
  225.         XOR     CX,CX
  226.         MOV     CL,[SI] ;GET THE LENGTH OF OUR STRING
  227.         INC     CL
  228.         INC     CL      ;INCREMENT STRING LENGTH BY 2 TO ALLOW FOR 'CR'
  229.         REPZ    MOVSB   ;PASS STRING TO CALLERS INPUT BUFFER
  230.         MOV     BYTE PTR CS:L0138,0 ;SET FLAG TO '0'
  231.         POP     SI                  ;RESTORE SAVED REGISTERS
  232.         POP     DI
  233.         POP     ES
  234.         POP     CX
  235.         POP     DS
  236.         IRET            ;RETURN TO CALLER
  237.  
  238. ;
  239. ; ENTRY POINT FOR INT 21 X'FF' FUNCTION CALL
  240. ;
  241.  
  242. L01D4:  PUSH    CX ;SAVE SOME REGISTERS
  243.         PUSH    DI
  244.         PUSH    SI
  245.         MOV     BYTE PTR CS:L0138,1 ;SET FLAG  TO '1'
  246.         MOV     DI,OFFSET L0139 ;POINT TO OUR STRING (LENGTH BYTE)
  247.         INC     DI              ;POINT PAST LENGTH BYTE TO STRING BYTE
  248. ;
  249.         MOV     SI,DX ;POINT TO OUR CODE WHERE CALLER WANTS ***************
  250. ;
  251.         XOR     CX,CX
  252.  
  253. L01E5:  MOV     AH,[SI] ;GET A BYTE OF OUR PROGRAM CODE
  254.         CMP     AH,0    ;WAS THE BYTE A '0'
  255.         JZ      L01F4   ;YES, WE ARE THRU
  256.         MOV     CS:[DI],AH ;NO, SAVE THE REQUESTED BYTE IN OUR STRING
  257.         INC     CX         ;SET POINTS UP BY 1
  258.         INC     SI
  259.         INC     DI
  260.         JMP     SHORT   L01E5 ;GO GET NEXT REQUESTED BYTE
  261.  
  262. L01F4:  MOV     AH,0DH ;MOVE A CARRAIGE RETURN AS LAST BYTE OF STRING
  263.         MOV     CS:[DI],AH
  264.         MOV     DI,OFFSET L0139 ;REPLACE THE STRING LENGTH WITH A
  265.         MOV     CS:[DI],CL      ;NEW STRING LENGTH
  266.         POP     SI              ;RESTORE THE SAVED REGISTERS
  267.         POP     DI
  268.         POP     CX
  269.         IRET                    ;RETURN TO CALLER
  270.  
  271. ;
  272. ; ENTRY POINT FOR INT 21 X'FE' FUNCTION CALL
  273. ;
  274.  
  275. L0203:  CLI
  276.         XOR     AX,AX        ;POINT TO INT 21 VECTOR ADDRESS
  277.         MOV     ES,AX
  278.         MOV     BX,84
  279.         MOV     CX,CS:L0132  ;RESTORE INT 21 SEGMENT OFFSET
  280.         MOV     ES:[BX],CX
  281.         MOV     DX,CS:L0134  ;RESTORE INT 21 SEGMENT ADDRESS
  282.         MOV     ES:[BX+2],DX
  283.         STI
  284.         MOV     ES,CS:L0136  ;PUT SEGMENT OF BLOCK (OUR CS) IN 'ES'
  285.         MOV     BX,0         ;SET NEW REQUESTED BLOCK SIZE IN PARAGRAPHS
  286.         MOV     AH,4A        ;REQUEST MODIFY OF ALLOCATED MEMORY BLOCKS
  287.         INT     21
  288.         IRET                 ;RETURN TO CALLER
  289.  
  290. ;
  291. ; OUR INTERNAL STACK AREA
  292. ;
  293.  
  294.         DB      'STACK   '
  295.         DB      'STACK   '
  296.         DB      'STACK   '
  297.         DB      'STACK   '
  298.         DB      'STACK   '
  299.         DB      'STACK   '
  300.         DB      'STACK   '
  301.         DB      'STACK   '
  302.         DB      'STACK   '
  303.         DB      'STACK   '
  304.         DB      'STACK   '
  305.         DB      'STACK   '
  306.         DB      'STACK   '
  307.         DB      'STACK   '
  308.         DB      'STACK   '
  309.         DB      'STACK   '
  310.         DB      'STACK   '
  311.         DB      'STACK   '
  312.         DB      'STACK   '
  313.         DB      'STACK   '
  314. L02CA   DB      0            ;TOP OF STACK + 1
  315.  
  316. ;
  317. ; INITIAL PROGRAM ENTRY POINT TO OVERIDE INT 21 FUNCTION CALL
  318. ;
  319.  
  320. L02CB:  XOR     DX,DX        ;SET CURSOR TO ROW=0,COLUMN=0 (UPPER LEFT)
  321.         MOV     BH,0
  322.         MOV     AH,2         ;SET CURSOR FUNCTION CALL TO ROM
  323.         INT     10
  324.         XOR     AX,AX
  325.         MOV     ES,AX        ;POINT TO EQUIPMENT FLAGS
  326.         MOV     DL,410
  327.         AND     DL,30        ;ISOLATE TYPE OF MONITOR
  328.         CMP     DL,30        ;IS MONOCHROME INSTALLED
  329.         JZ      L02EC        ;YES, GO DISABLE VIDEO INPUT
  330. ;
  331.         MOV     DX,03D8      ;NO, POINT TO COLOR MODE CONTROL REGISTER
  332.         MOV     AL,1         ;TURN OFF VIDEO ENABLE
  333.         OUT     DX,AL
  334.         JMP     SHORT   L02F2
  335.  
  336. L02EC:  MOV     AL,1         ;TURN OFF MONOCHROME VIDEO ENABLE
  337.         MOV     DX,03B8
  338.         OUT     DX,AL
  339. ;
  340. L02F2:  CLI
  341.         MOV     CS:L0136,CS  ;SAVE OUR CODE SEGMENT
  342.         XOR     AX,AX
  343.         MOV     ES,AX
  344.         MOV     BX,84        ;POINT TO 0:84 , INT 21 VECTOR ADDRESS
  345.         MOV     CX,ES:[BX]   ;GET AND SAVE DOS INT 21 SEGMENT OFFSET ADDRESS
  346.         MOV     CS:L0132,CX
  347.         MOV     DX,ES:[BX+2] ;GET AND SAVE DOS INT 21 SEGMENT ADDRESS
  348.         MOV     CS:L0134,DX
  349.         MOV     CX,OFFSET L0193 ;POINT TO OUR SEGMENT OFFSET REPLACEMENT ADDR
  350.         MOV     ES:[BX],CX      ;REPLACE INT 21 SEGMENT OFFSET WITH OURS
  351.         MOV     DX,CS
  352.         MOV     ES:[BX+2],DX    ;REPLACE INT 21 SEGMENT ADDRESS WITH OURS
  353.         STI
  354.         MOV     DX,OFFSET L02CB ;POINT TO END OF CODE+1 TO REMAIN RESIDENT
  355.         INC     DX
  356.         PUSH    CS
  357.         POP     ES
  358.         INT     27              ;TERMINATE AND REMAIN RESIDENT
  359.         RET_NEAR
  360. END     L0100
  361.  
  362.   ENJOY YOUR NEW FOUND FREEDOM..HARD DISKS FOREVER!!!!!
  363.